#ifndef VIN_SOUNDMANAGER_H_
#define VIN_SOUNDMANAGER_H_

#include "SGD Wrappers/CSGD_FModManager.h"
///////////////////////////////////////////////////////////
//
// The sound manager is used to load and play all the sounds
// needed in the game
//
//
////
#define BGM_TITLESCREEN 1
#define BGM_CREDITS 2
#define BGM_OTHERMENUS 3
#define BGM_STAGE 4
#define BGM_HIGHSCORES 5

class VIN_SoundManager
{
	// private data
private:
	// simple sound manager
	CSGD_FModManager* fmod;// = CSGD_FModManager::GetInstance();

	// Enemy Sounds
	int Death1, Death2;

	// punch sounds
	int Punch1, Punch2, Punch3;

	// Woosh sounds
	int Woosh1, Woosh2, Woosh3;

	// Hurt sounds
	int Hurt1, Hurt2, Hurt3;

	// Gunshots
	int Gunshot1, Gunshot2, Gunshot3;

	// Menu sounds
	int MenuSelect, MenuConfirm;

	// Various other sounds
	int Pickup, Explosion, Alarm, Collect;

	int CityID;				 // Stage Music
	int TitleBGM;			 // Title/Main Menu Music
	int MenuBGM;			 // Other Menu Music
	int CreditBGM;           // End Credits
	int Highscores;			 // High scores music



	// private functions
private:
	VIN_SoundManager();
	~VIN_SoundManager();
	VIN_SoundManager(const VIN_SoundManager& copy);
	//VIN_SoundManager& operator=(const VIN_SoundManager& assign);


	// protected data/functions
protected:

	// public data/functions
public:

	static VIN_SoundManager* GetInstance();

	bool Startup(void); // Used to load up all of the sounds in one call, Returns true if startup was successfully completed

	void Shutdown(void); // Used to clear all of the memory and close the manager

	/* For This Function use the PREDEFINED Values of
	BGM_TITLESCREEN, BGM_CREDITS, BGM_OTHERMENUS, BGM_STAGE */
	void PlayBGM(int Screen /*use the #defines listed above*/); 
	void PlaySound(int SoundID);

	void PlayPunch();
	void PlayWoosh();
	void PlayDeath();
	void PlayExplosion();
	void PlayMenuSelect();
	void PlayMenuConfirm();
	void PlayAlarm();
	void PlayPickup();
	void PlayKnifeSlash();
	void PlayCollect();
	void PlayPlayerDeath();

	void PlayCityAmbient();
	void PlayFarmAmbient();
	void PlayDockAmbient();
	void PlayFactoryAmbient();

	void StopAllSounds();
	void StopSound(int SoundID);

	void ResetAllSounds();
	void ResetSound(int SoundID);

	void SetSFXVolume(float volume);
	void SetBGMVolume(float volume);

	int GetAlarm() { return Alarm; }

};
#endif